<?php

/**
 * DadosUsuario form.
 *
 * @package    form
 * @subpackage DadosUsuario
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 6174 2007-11-27 06:22:40Z fabien $
 */
class AutoUsuarioForm extends BaseDadosUsuarioForm
{
	public $cliente;

	public function configure()
	{
		parent::configure();
		
        $endereco   				= $this->getObject()->DadosEndereco;
		$endereco->DadosUsuario		= $this->getObject();
		$form_endereco 				= new EnderecoForm($endereco);
		$this->embedForm('endereco', $form_endereco);

		$this->widgetSchema['dt_nascimento']    = new sfWidgetFormInput(array(), array('class'=>"is_date_picker")) ;
		$this->widgetSchema['cliente']     		= new sfWidgetFormInputHidden(array()) ;
		$this->widgetSchema['no_usuario']       = new sfWidgetFormInput(array(), array('size' => 50,'class'=>"{required:true, messages:{required:'O campo Nome Completo é obrigatório.'}}")) ;
		$this->widgetSchema['sobrenome']        = new sfWidgetFormInput(array(), array('required' => false, 'size' => 50));
		$this->widgetSchema['email']         	= new sfWidgetFormInput(array(), array('size' => 50, 'class'=>"email"));
		$this->widgetSchema['nu_cpf']           = new sfWidgetFormInput(array(), array('class'=>"cpf {required:true, messages:{required:'O campo CPF é obrigatório.'}}")) ;
		$this->widgetSchema['sexo']             = new sfWidgetFormChoice(array("choices"=>array("M" => "Masculino", "F" => "Feminino")));
		$this->widgetSchema['st_estado_civil']  = new sfWidgetFormChoice(array("choices"=>array("S" => "Solteiro(a)", "C" => "Casado(a)", "D" => "Divorciado(a)", "V" => "Viúvo(a)", "O" => "Outro(a)")));
		$this->widgetSchema['ddd_tel_celular']  = new sfWidgetFormInput(array(), array('class'=>"input_ddd")) ;
		$this->widgetSchema['ddd_tel_fixo']  	= new sfWidgetFormInput(array(), array('class'=>"input_ddd {required:true, messages:{required:'O campo DDD do TELEFONE FIXO é obrigatório.'}}")) ;
		$this->widgetSchema['tel_fixo']  		= new sfWidgetFormInput(array(), array('class'=>"tel {required:true, messages:{required:'O campo TELEFONE FIXO é obrigatório.'}}")) ;
		$this->widgetSchema['tel_celular']  	= new sfWidgetFormInput(array(), array('class'=>"tel")) ;
		//$this->widgetSchema['email']  			= new sfWidgetFormInput(array(), array('class'=>"email {required:true, messages:{required:'O campo EMAIL é obrigatório.'}}")) ;

		$this->widgetSchema['nu_cpf_pai']		= new sfWidgetFormInput(array(), array('class'=>"cpf_mask")) ;
		$this->widgetSchema['nu_cpf_mae']   	= new sfWidgetFormInput(array(), array('class'=>"cpf_mask")) ;

        $this->validatorSchema["dt_nascimento"] = new sfValidatori18nDate(array('required' => false));
        
        /*
         * VALIDADORES DE USERNAME E SENHA TEMPORARIAS
         */
        $this->validatorSchema["username"] 	= new sfTempUserValidator(array('required' => false));
        $this->validatorSchema["password"] 	= new sfTempPassValidator(array('required' => false));
        $this->validatorSchema["password2"] = new sfTempPassValidator(array('required' => false));

		$this->setValidator('cliente', new sfValidatorString(array('required' => false)));

		$this->setValidator("nu_cpf", new sfValidatorCpfCnpj(array("type"=>"cpf", 'required' => true)));
		$this->setValidator("nu_cpf_pai", new sfValidatorCpfCnpj(array("type"=>"cpf", 'required' => false)));
		$this->setValidator("nu_cpf_mae", new sfValidatorCpfCnpj(array("type"=>"cpf", 'required' => false)));

            $this->setValidator(
                    'email',
                    new sfValidatorAnd(array(
                            new sfValidatorEmail(array('required' => false, 'trim' => true)),
                            new sfValidatorString(array('required' => false, 'max_length' => 80))
                    )
                )
            );

        $schema = $this->validatorSchema;

        $postValidator = $schema->getPostValidator();
		$postValidators = array();
		
		//VERIFICANDO SE O CPF DA MAE È IGUAL AO DO USUARIO
		$postValidators = array(
		        new sfValidatorSchemaCompare(
		        	'nu_cpf_mae',
		        	sfValidatorSchemaCompare::NOT_EQUAL,
		        	'nu_cpf',
		        	array(),
		        	array('invalid' => 'O número de CPF da mãe não pode ser idêntico ao seu.')
		        ),
		        new sfValidatorSchemaCompare(
		        	'nu_cpf_mae',
		        	sfValidatorSchemaCompare::NOT_EQUAL,
		        	'nu_cpf_pai',
		        	array(),
		        	array('invalid' => 'O número de CPF da mãe não pode ser idêntico ao do pai.')
		        ),
		        new sfValidatorSchemaCompare(
		        	'nu_cpf_pai',
		        	sfValidatorSchemaCompare::NOT_EQUAL,
		        	'nu_cpf',
		        	array(),
		        	array('invalid' => 'O número de CPF do pai não pode ser idêntico ao seu.')
		        ),
		        new sfValidatorSchemaCompare(
		        	'nu_cpf_pai',
		        	sfValidatorSchemaCompare::NOT_EQUAL,
		        	'nu_cpf_mae',
		        	array(),
		        	array('invalid' => 'O número de CPF do pai não pode ser idêntico ao da mãe.')
		        )
	        );
       

        if (isset($postValidator))
        	$postValidators[] = $postValidator;

        $this->validatorSchema->setPostValidator(new sfValidatorAnd($postValidators));

        $this->widgetSchema->setLabels(array(
                                      'nu_cpf'           	=> 'CPF',
                                      'no_usuario'       	=> 'Nome completo',
                                      'sobrenome'     	 	=> 'Sobrenome',
                                      'dt_nascimento' 	 	=> 'Data de nascimento',
      								  'nu_rg'			 	=> 'RG',
      								  'tel_fixo'		 	=> 'Telefone Fixo',
      								  'tel_celular'		 	=> 'Telefone Celular',
      								  'password'		 	=> 'Senha',
      								  'password2'		 	=> 'Confirme sua senha',
                                      'groups_list'      	=> "Grupos",
                                      'permissions_list' 	=> "Permissões",
      								  'username'		 	=> 'Login',
      								  'no_usuario_pai'		=> 'Nome do Pai',
      								  'nu_cpf_pai'		 	=> 'CPF do Pai',
      								  'st_estado_civil'		 => 'Estado Civil',
      								  'no_usuario_mae'		 => 'Nome da Mãe',
      								  'nu_cpf_mae'		 	=> 'CPF da Mãe',
      								  'nu_renda'		 	=> 'Renda (R$)',
      								  'nu_tempo_residencia'	=> 'Tempo de residência',
      								  'ds_profissao'		 => 'Profissão',
      								  'st_conjuge'			=> "Cônjuge ou companheito há mais de 2 anos?"
      								));

		//unset($this['id_dados_usuario']);
      	$this->validatorSchema->setOption('allow_extra_fields', true);

	}

	public function setValidate($validate)
	{
		$this->validate = $validate;
	}

	public function doSave($con = null)
	{
	        //print_r($this->getValues()); die;
			$user   = ($this->getValue('id_usuario')) ? Doctrine::getTable('sfGuardUser')->find($this->getValue('id_usuario')) : new sfGuardUser();
			
			//limpando o CPF para inserção direta
			$username	= str_replace('.', '', $this->getValue('nu_cpf'));
			$username	= str_replace('-', '', $username);
			
			$user->setUsername($username);
			$user->setPassword($username);
			$user->setIsActive(true);
			$user->save();

		//Caso usuário seja cadastrado pelo portal - CLIENTE
		if($this->getValue('cliente'))
		{
		 	$this->idUsuario = $user->getId();
		 	parent::doSave($con);
		 	$user->addGroupByName("cliente");
		 	$user->addPermissionByName("cliente");
		 	return;
		}
		else
		{
			$this->idUsuario = $user->getId();
			return parent::doSave($con);
		}
	}

	public function updateObject($values = null)
	{
		$object = parent::updateObject($values);
		$object->setIdUsuario($this->idUsuario);

		// Don't break subclasses!
		return $object;
	}
}